package br.com.simtecnologia.access.controll;

import java.io.Serializable;

public interface LoginFlow extends Serializable {
	/**
	 * Verifica se há rota de recuperação de fluxo para a <tt>sessionClass</tt> enviada.  
	 * @param sessionClass a classe de login a qual se deseja verificar se há rota.
	 */
	boolean hasRetrieveRoute(Class<? extends LoginSession> sessionClass);
	/**
	 * Verifica se há rota de recuperação de fluxo para a <tt>conversationId</tt> enviada.  
	 * @param conversationId a identificação de conversation, este ID é usado para recupera
	 * 			a rota especifica de um acesso que foi desviado para página de login.
	 * 			ao ter uma rota desviada para o login, este codigo passa a ser acessivel
	 * 			na view usando-se ${loginflow} e ser acessado na lógica usando-se
	 * 			<br/><tt>result.included().get("loginflow");</tt>
	 * 			
	 */
	boolean hasRetrieveRoute(Long conversationId);
	
	/**
	 * O mesmo que <tt>retrieveFlowBeforeLogin(DefaultLoginSession.class)</tt>, ou seja
	 * tenta recuperar o fluxo para a sessão padrão de login.
	 * @param result 
	 * @return
	 */
	boolean retrieveFlowBeforeLogin();
	
	boolean retrieveFlowBeforeLogin(Long conversationId);
	
	boolean retrieveFlowBeforeLogin(Class<? extends LoginSession> sessionClass);
}
